<?php Yii::import('participantes.models.*'); ?>
<?php Yii::import('eventos.models.*'); ?>
<?php Yii::import('actividades.models.*'); ?>
<?php

class InscripcionController extends AweController {

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'admin';

    public function filters() {
        return array(
            array('CrugeAccessControlFilter'),
        );
    }

    /**
     * Displays a particular model.
     * @param integer $id the ID of the model to be displayed
     */
    public function actionView($id) {
        $this->render('view', array(
            'model' => $this->loadModel($id),
        ));
    }

    public function actionInscripcion() {
        $usuario = Yii::app()->user->um->loadUserById(Yii::app()->user->id);
//        var_dump($usuario->carrera->nombre);
        $model = new Inscripcion;
        $participante = new Participante;
        $Escuela = new Escuela;
        $Carrera = new Carrera;
        $evento = new Evento;
        $mensaje = null;
        $status = null;


        $this->performAjaxValidation($model, 'participante-form');


        if (isset($_POST['Participante'])) {
            $participante->attributes = $_POST['Participante'];

//            $participante=  Participante::model()->findByPk($_POST['Participante']['cedula']);
            if (!Participante::model()->findByPk($_POST['Participante']['cedula'])) {
                $participante->attributes = $_POST['Participante'];
                $participante->save();
            } else {
                $participante = Participante::model()->findByPk($_POST['Participante']['cedula']);
                $participante->attributes = $_POST['Participante'];
                $participante->save();
                Yii::app()->user->setFlash('warning', "Su información personal a sido actualizada.");
            }
            if (!empty($_POST['Inscripcion'])) {
                $model->attributes = $_POST['Inscripcion'];
                $inscripcion = Inscripcion::model()->find(array("condition" => 'participante_id=:participante_id and evento_id=:evento_id', "params" => array(":participante_id" => $_POST['Participante']['cedula'], ":evento_id" => $_POST['Inscripcion']['evento_id'])));
                if (!empty($inscripcion)) {
//                       Yii::app()->user->setFlash('error', "Ud ya esta inscrito en este evento.");
                    Yii::app()->user->setFlash('error', "Ud ya esta inscrito en este evento.");
                } else {
                    $model->participante_id = $_POST['Participante']['cedula'];
                    $model->evento_id = $_POST['Inscripcion']['evento_id'];
                    if ($model->save()) {
                        Mailer::enviarEmail($participante->email, utf8_decode("Confirmación de Inscripción"), utf8_decode(
                                        ' <img src="http://i910.photobucket.com/albums/ac307/davis_bartce/logo2.png" width="450" height="250">
                                            <table>
                                       <tr>
                                        <td colspan="2">Estimado(a) : ' . $participante->nombres . '</td>
                                        </tr>
                                        <tr>
                                            <td style="padding: 10px;"></td>
                                        </tr>
                                        <tr>
                                            <td colspan="2">Su inscripción al evento académico <strong>' . $model->evento->nombre . ' </strong> se ha realizado con éxito  <strong>.</td>
                                        </tr>
                                        <tr>
                                            <td colspan="2">Recuerde el evento se llevará acabo desde el <strong>' . $model->evento->fecha_inicio . ' </strong> hasta el   <strong>.' . $model->evento->fecha_fin . '</td>
                                        </tr>
                                 <table>'
                        ));
                        Yii::app()->user->setFlash('success', "Inscripción realizada correctamente.");
                        $this->redirect(array('admin'));
                    }
                }
            } else {
                // flash messages d error no ha SELECCIONADO  
            }
        }
        $this->render('_formInscripcion', array(
            'model' => $model,
            'escuela' => $Escuela,
            'carrera' => $Carrera,
            'participante' => $participante,
//                    'evento'=>$evento,
        ));
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate() {
        $model = new Inscripcion;

        $this->performAjaxValidation($model, 'inscripcion-form');

        if (isset($_POST['Inscripcion'])) {
            $model->attributes = $_POST['Inscripcion'];
            if ($model->save()) {
                $this->redirect(array('view', 'id' => $model->id));
            }
        }

        $this->render('create', array(
            'model' => $model,
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id) {
        $model = $this->loadModel($id);

        $this->performAjaxValidation($model, 'inscripcion-form');

        if (isset($_POST['Inscripcion'])) {
            $model->attributes = $_POST['Inscripcion'];
            if ($model->save()) {
                $this->redirect(array('view', 'id' => $model->id));
            }
        }

        $this->render('update', array(
            'model' => $model,
        ));
    }

    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
    public function actionDelete($id) {
        if (Yii::app()->request->isPostRequest) {
            // we only allow deletion via POST request
            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if (!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        } else
            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }

    /**
     * Lists all models.
     */
    public function actionIndex() {
        $dataProvider = new CActiveDataProvider('Inscripcion');
        $this->render('index', array(
            'dataProvider' => $dataProvider,
        ));
    }

    /**
     * Manages all models.
     */
    public function actionAdmin() {
        $model = new Inscripcion('search');
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];

        $this->render('admin', array(
            'model' => $model,
        ));
    }

    public function actionAdminAprobadosUci() {

        $model = new Inscripcion('search');
        $model->unsetAttributes(); // clear any default values
        $aprobados = Inscripcion::model()->aprobados()->findAll();
//        $aprobados=Inscripcion::model()->aprobados()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" =>$idEvento)));
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];

        $this->render('adminAprobadosUci', array(
            'model' => $model,
            'aprobados' => $aprobados,
        ));
    }

    public function actionAdminAprobadosEvento($idEvento) {
        $this->actionCalcularHorasAsistencia($idEvento);

        $model = new Inscripcion('search');
        $evento=  Evento::model()->findByPk($idEvento);
        $aprobados=array();
        $eventoAprobacion=0;
        $model->unsetAttributes(); // clear any default values
//        $aprobados = Inscripcion::model()->aprobados()->findAll();
        if($evento->horas_minimo == 0){
                    $aprobados = Inscripcion::model()->confirmados()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" => $idEvento)));
                    $eventoAprobacion=1;

        }
        else{
                    $aprobados = Inscripcion::model()->aprobados()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" => $idEvento)));

        }
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];

        $this->render('adminAprobados', array(
            'model' => $model,
            'aprobados' => $aprobados,
            'idEvento' => $idEvento,
            'eventoAprobacion' => $eventoAprobacion,
        ));
    }

    public function actionCalcularHorasAsistencia($idEvento) {

        $evento = Evento::model()->findByPk($idEvento);
        $horasMinimo = $evento->horas_minimo;

//        var_dump($evento->inscripcions);
        foreach ($evento->inscripcions as $inscripcion) {
            if ($inscripcion->confirmacion == 1) {
                $entrada = null;
                $salida = null;
                $contadorHoras = null;
                $fechatemp = null;
                foreach ($inscripcion->asistencias as $asistencia) {
//                    echo 'asistencia';
//                    var_dump($asistencia->attributes);
                    if ($asistencia->estado == 'ENTRADA') {
                        $entrada = $asistencia->hora;
                        $fechatemp = $asistencia->fecha;
//                        echo 'entrada';
//                        var_dump($entrada);
//                        var_dump($fechatemp);
                    } else if ($asistencia->estado == 'SALIDA' && $asistencia->fecha == $fechatemp) {
                        $salida = $asistencia->hora;
                        $contadorHoras+= $this->RestarHoras($entrada, $salida);
                        if ($contadorHoras >= $horasMinimo) {
                            $inscripcion->aprobado = 'SI';
                            $inscripcion->save();
                            break;
                        }
//                        echo 'salida';
//                        
//                        var_dump($contadorHoras);
//                         var_dump($this->RestarHoras($entrada,$salida));
//                         echo 'contador horas';
//                         var_dump($contadorHoras);
                    }
                }

//                die();
            }
        }
    }

    public function RestarHoras($horaini, $horafin) {
//          var_dump($horaini, $horafin);
        $horai = substr($horaini, 0, 2);
        $mini = substr($horaini, 3, 2);
        $segi = substr($horaini, 6, 2);

        $horaf = substr($horafin, 0, 2);
        $minf = substr($horafin, 3, 2);
        $segf = substr($horafin, 6, 2);

        $ini = ((($horai * 60) * 60) + ($mini * 60) + $segi);
        $fin = ((($horaf * 60) * 60) + ($minf * 60) + $segf);

        $dif = $fin - $ini;
        $difh = floor($dif / 3600);
        $difm = floor(($dif - ($difh * 3600)) / 60);
        $difs = $dif - ($difm * 60) - ($difh * 3600);
        $horas = $difh * 60;
        $minutos = $difm;
        $segundos = $difs > 30 ? 1 : 0;
//        return date("H-i-s", mktime($difh, $difm, $difs));
        return (($horas + $minutos + $segundos) / 60);
    }

    public function actionAdminConfirmados() {

        $model = new Inscripcion('search');
        $model->unsetAttributes(); // clear any default values
        $aprobados = Inscripcion::model()->aprobados()->findAll();
//        $aprobados=Inscripcion::model()->aprobados()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" =>$idEvento)));
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];

        $this->render('adminAprobados', array(
            'model' => $model,
            'aprobados' => $aprobados,
        ));
    }

    public function actionInscripcionesEvento($idEvento = NULL) {
        $evento = Evento::model()->findByPk($idEvento);
        $model = new Inscripcion('searchInscripcion');
        $inscripciones = Inscripcion::model()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" => $idEvento)));
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];
        $this->render('adminInscripcionEvento', array(
            'model' => $model,
            'evento' => $evento,
            'inscripciones' => $inscripciones,
        ));
    }

    public function actionControlAsistencia1($idEvento = NULL) {
        $evento = Evento::model()->findByPk($idEvento);
        $model = new Inscripcion('searchInscripcion');
        $inscripciones = Inscripcion::model()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" => $idEvento)));

        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];
        $this->render('controlAsistencia_conWidgets', array(
            'model' => $model,
            'evento' => $evento,
            'inscripciones' => $inscripciones,
        ));
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__) {
        $model = Inscripcion::model()->findByPk($id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
//	protected function performAjaxValidation($model, $form=null)
//	{
//		if(isset($_POST['ajax']) && $_POST['ajax'] === 'inscripcion-form')
//		{
//			echo CActiveForm::validate($model);
//			Yii::app()->end();
//		}
//	}

    public function actionBuscarParticipante($id = NULL) {
        $participante = Participante::model()->findByPk($id);
//        foreach (ClienteCuenta::model()->tipoPosicionFiscal as $key => $pf)
//        {
//            if ($cliente->posicion_fiscal == $key)
//            {
//                $cliente->posicion_fiscal = $pf;
//            }
//        }
        echo CJSON::encode($participante);
    }

    public function actionCrearPdf($id) {

        $mPDF1 = Yii::app()->ePdf->mpdf();
        $mPDF1->WriteHTML(
                $this->render('pdf', array(
                    'model' => $this->loadModel($id), true
                ))
        );
        $mPDF1->Output();
    }

    public function actionViewPdf($id) {
        $this->render('prueba_pdf', array(
            'model' => $this->loadModel($id),
        ));
    }

    public function actionPdf($id, $idEvento) {

        $modelos = array();
        $evento = Evento::model()->findByPk($idEvento);
        $imagen = $evento ? utf8_decode($evento->carrera->escuela->imagen) : '';
        $certificados = array();
        if ($id == "todos") {
            $modelos = Inscripcion::model()->findAll(array("condition" => "evento_id=:evento_id and aprobado = :aprobado", "params" => array(":evento_id" => $idEvento, ":aprobado" => "SI")));
        } else {
            $certificados = ( explode(',', $id));
            for ($i = 0; $i < (count($certificados)); $i++) {

                $modelos = array_merge($modelos, array($this->loadModel($certificados[$i])));
            }
        }



        if ($modelos) {
            $mPDF1 = Yii::app()->ePdf->mpdf('', 'A4-L', '', '', 15, 15, 5, 10, 5, 5); //formato de pdf
            //cargas css
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/screen.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/print.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/bootstrap.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/main.css'), 1);
            $mPDF1->WriteHTML($this->renderPartial("pdf2", array(
//                        'model' => $model,
                        'modelos' => $modelos,
                        'imagen' => $imagen,
                            ), true, false));

            $mPDF1->Output("CERTIFICADO-{$model->id}.pdf", 'd');
        }
    }

    public function actionPdfUci($id) {
        $inscripcion = Inscripcion::model()->findByPk($id);
        $modelos = array();
//        $evento = $inscripcion->evento;
////        $evento = Evento::model()->findByPk($idEvento);
//        $imagen = $evento ? utf8_decode($evento->carrera->escuela->imagen) : '';
        $certificados = array();
        if ($id == "todos") {
            $modelos = Inscripcion::model()->findAll(array("condition" => "aprobado = :aprobado", "params" => array(":aprobado" => "SI")));
        } else {
            $certificados = ( explode(',', $id));
            for ($i = 0; $i < (count($certificados)); $i++) {

                $modelos = array_merge($modelos, array($this->loadModel($certificados[$i])));
            }
        }



        if ($modelos) {
            $mPDF1 = Yii::app()->ePdf->mpdf('', 'A4-L', '', '', 15, 15, 5, 10, 5, 5); //formato de pdf
            //cargas css
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/screen.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/print.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/bootstrap.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/main.css'), 1);
            $mPDF1->WriteHTML($this->renderPartial("pdf2", array(
//                        'model' => $model,
                        'modelos' => $modelos,
                        'imagen' => $imagen,
                            ), true, false));

            $mPDF1->Output("CERTIFICADO-{$model->id}.pdf", 'd');
        }
    }

    public function actionPdfVisto($id = NULL) {

        $modelos = array();
        $certificados = array();
        if ($id == "todos") {
            $modelos = Inscripcion::model()->findAll(array("condition" => "aprobado = :aprobado", "params" => array(":aprobado" => "SI")));
        } else {
            $certificados = ( explode(',', $id));
            for ($i = 0; $i < (count($certificados)); $i++) {

                $modelos = array_merge($modelos, array($this->loadModel($certificados[$i])));
            }
        }



        if ($modelos) {
            $mPDF1 = Yii::app()->ePdf->mpdf('', 'A4-L', '', '', 15, 15, 5, 10, 5, 5); //formato de pdf
            //cargas css
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/screen.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/print.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/bootstrap.css'), 1);
            $mPDF1->WriteHTML(file_get_contents(Yii::getPathOfAlias('webroot.css') . '/main.css'), 1);
//            $mPDF1->WriteHTML($this->renderPartial("pdf2", array(
////                        'model' => $model,
//                        'modelos' => $modelos,
//                            ), true, false));

            $this->render("pdf2", array(
//                        'model' => $model,
                'modelos' => $modelos,
            ));
//            $mPDF1->Output("CERTIFICADO-{$model->id}.pdf", 'd');
        }
    }

    public function actionAprobados($id = null, $eventoId = null) {
//        var_dump($id,$eventoId);
//        die();
        if ($id == 'todos') {
            $aprobados = Inscripcion::model()->findAll();
            foreach ($aprobados as $aprobado) {
                $aprobado->confirmacion = 1;
                $aprobado->save();
            }
        } else {
            $aprobados = explode(',', $id);
            foreach ($aprobados as $aprobado) {
                $aprobar = $this->loadModel($aprobado);
                var_dump($aprobar);
                $aprobar->confirmacion = 1;
                $aprobar->save();
            }
        }

//        var_dump($aprobados);
//        die();
////          $model = $this->loadModel(1);
////          $model->confirmacion=0;
////          $model->save();
////        $model = new Inscripcion('search');
////        $model->unsetAttributes(); // clear any default values
////        if (isset($_GET['Inscripcion']))
////            $model->attributes = $_GET['Inscripcion'];
//
//        $this->redirect('adminAprobados', array(
//            'model' => $model,
//        ));
    }

    public function actionConfirmados($id = null, $eventoId = null) {

        if ($id == 'todos') {
//            $modelos = Inscripcion::model()->findAll(array("condition" => "aprobado = :aprobado", "params" => array(":aprobado" => "SI")));
//            $confirmados = Inscripcion::model()->findAll(array("condition" => "aprobado = :aprobado and evento_id=:evento_id", 
//                "params" => array(":aprobado" => "SI",':evento_id'=>$eventoId)));
            $confirmados = Inscripcion::model()->findAll(array("condition" => "evento_id=:evento_id",
                "params" => array(":evento_id" => $eventoId)));
            foreach ($confirmados as $confirmado) {
                $confirmado->confirmacion = 1;
                $confirmado->save();
            }
        } else {
            $confirmados = explode(',', $id);
            foreach ($confirmados as $confirmado) {
                $aprobar = $this->loadModel($confirmado);
//                var_dump($aprobar);
                $aprobar->confirmacion = 1;
                $aprobar->save();
            }
        }
    }

//    public function actionAjaxJsonInscripcion() {
//        //        var_dump($_GET);
//        //        die();
//        $result = array();
//        $model = NULL;
//        if (Yii::app()->request->isAjaxRequest) {
//            if (isset($_GET)) {
//                $param = $_GET['searchString'];
////					$condition = $_GET['condition'];
//
//                $model = Inscripcion::model()->confirmados()->de_likeAttributes($param, array(
//                            't.participante_id'
//                        ))->de_limit(10)->findAll();
//                if ($model) {
//                    foreach ($model as $value) {
//                        $result['data'][] = array(
//                            'data' => array(
//                                'participante_id' => $value->participante_id,
//                                'value' => $value->participante_id . ' ' . $value->participante->nombres . ' ' . $value->participante->apellidos
//                        ));
//                    }
//                }
//            }
//            echo CJSON::encode($result);
//        }
//    }

    public function actionControlAsistencia2($idEvento = NULL) {
        $evento = Evento::model()->findByPk($idEvento);
        $model = new Inscripcion('searchInscripcion');
        $inscripciones = Inscripcion::model()->find(array("condition" => "evento_id = :evento", "params" => array(":evento" => $idEvento)));
        $model->unsetAttributes(); // clear any default values
        if (isset($_GET['Inscripcion']))
            $model->attributes = $_GET['Inscripcion'];
        $this->render('controlAsistencia_2', array(
            'model' => $model,
            'evento' => $evento,
            'inscripciones' => $inscripciones,
        ));
    }

    public function actionControlAsistencia($idEvento = NULL, $actividad_id = null) {
        $this->layout = '//layouts/asistencia';
        $evento = Evento::model()->findByPk($idEvento);
        $asistencia = new Asistencia;
        $actividad = null;
        if ($actividad_id) {
            $actividad = Actividad::model()->findByPk($pk);
        }
//        $actvidades=$evento->
        $model = new Inscripcion('search');
        $model->unsetAttributes();
        $actividades = $evento->actividads;
//        var_dump($actividades);
//        die();
        if (isset($_GET['search'])) {
            $model->attributes = $this->assignParams($_GET['search']);
        }

        $this->render('controlAsistencia', array(
            'model' => $model,
            'evento' => $evento,
            'asistencia' => $asistencia,
            'actividad' => $actividad ? $actividad : null,
                ), FALSE, TRUE);
    }

    public function assignParams($params) {
        $result = array();
        if ($params['filters'][0] == 'all') {
            foreach (Inscripcion::model()->searchParams() as $param) {
                $result[$param] = $params['value'];
            }
        } else {
            foreach ($params['filters'] as $param) {
                $result[$param] = $params['value'];
            }
        }
        return $result;
    }

    public function actionAjaxAgregarAsistencia($id_inscripcion = null, $estado = null, $evento_id = null) {

        $inscripcionAsistencia = new Asistencia;
//        $inscripcionAsistencia->actividad_id = $actividad_id;
        $inscripcionAsistencia->evento_id = $evento_id;
        $inscripcionAsistencia->inscripcion_id = $id_inscripcion;
        $inscripcionAsistencia->fecha = date('Y-m-d');
        $inscripcionAsistencia->hora = date('H:i:s');
        $inscripcionAsistencia->estado = $estado;

        $inscripcionAsistencia->save();
//      var_dump('entro');
//      die();
    }

    public function actionActividades($evento_id) {
        $model = new Actividad('search');
        $model->unsetAttributes();

        if (isset($_GET['search'])) {
//            $model->attributes = $this->assignParamsCliente($_GET['search']);
        }

        $this->renderPartial('actividades.views.actividad.actividades', array(
            'model' => $model,
            'evento_id' => $evento_id,
                ), FALSE, TRUE);
    }

}
